package disenioPantallas.fichaAnimal;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.BoxLayout;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerDateModel;
import javax.swing.SwingConstants;

import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;

import disenioPantallas.elementos.EButton;
import disenioPantallas.elementos.ELabel;
import disenioPantallas.elementos.EPanel;
import disenioPantallas.elementos.ETextField;
import disenioPantallas.elementos.MyTableModel;
import disenioPantallas.elementos.dialogGeneral;

import entidades.Animal;
import entidades.Pesaje;
import gestores.GestorAnimal;
import gestores.GestorErrores;


import actionListeners.MascaraTipoIntListener;

import java.awt.Font;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;


public class DPesosAnimal extends dialogGeneral {

	private static final long serialVersionUID = 1L;
	private GestorAnimal gAnimal=GestorAnimal.getGestorAnimal();
	private JTextField txPeso;
	private GestorErrores gError=GestorErrores.getGestorErrores();
	private Vector<entidades.Pesaje> pesos= new Vector<Pesaje>();
	
	private Animal animal=gAnimal.getAnimalActual();
	
	private JTable table;
	private JSpinner spinner;
	private JScrollPane scrollPane;
	
	public DPesosAnimal() {
		setPreferredSize(new Dimension(700, 400));
		setTitle("Ingresar Caravana");
		setMinimumSize(new Dimension(700, 400));
		getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
		
		Component verticalStrut = Box.createVerticalStrut(8);
		getContentPane().add(verticalStrut);
		
		JPanel panelTitulo = new EPanel();
		getContentPane().add(panelTitulo);
		
		String titulo=String.format("Peajes de Animal con id: #%d", gAnimal.getAnimalActual().getIdAnimal());
		panelTitulo.setLayout(new BoxLayout(panelTitulo, BoxLayout.X_AXIS));
		JLabel lblPeajesDeAnimal = new ELabel(titulo);
		lblPeajesDeAnimal.setFont(new Font("Cambria", Font.PLAIN, 20));
		panelTitulo.add(lblPeajesDeAnimal);
		
		JPanel panelPesaje = new JPanel();
		panelPesaje.setOpaque(false);
		getContentPane().add(panelPesaje);
		panelPesaje.setLayout(new BoxLayout(panelPesaje, BoxLayout.X_AXIS));
		
		JPanel panelListado = new JPanel();
		panelListado.setOpaque(false);
		panelPesaje.add(panelListado);
		
		scrollPane = new JScrollPane();
		String pesajeTitulo=String.format("Peso Actual: %d",animal.getPesoActual());
		scrollPane.setBorder(new TitledBorder(null, pesajeTitulo, TitledBorder.LEADING, TitledBorder.TOP, null, null));
		scrollPane.setPreferredSize(new Dimension(400, 300));
		scrollPane.setMinimumSize(new Dimension(400, 300));
		panelListado.add(scrollPane);
		
		table = new JTable();
		scrollPane.setViewportView(table);

		try {
			
			pesos=gAnimal.getListadePesajes();
			table.setModel(new listadoPesajeModel(pesos));

		} catch (Throwable e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		
		JPanel panelNuevo = new JPanel();
		panelNuevo.setOpaque(false);
		panelPesaje.add(panelNuevo);
		panelNuevo.setLayout(new BoxLayout(panelNuevo, BoxLayout.Y_AXIS));
		
		Component verticalStrut_1 = Box.createVerticalStrut(20);
		panelNuevo.add(verticalStrut_1);
		
		JPanel panelFecha = new EPanel();
		panelFecha.setPreferredSize(new Dimension(250, 50));
		panelFecha.setMaximumSize(new Dimension(250, 50));
		panelNuevo.add(panelFecha);
		
		JLabel lblFecha = new JLabel("Fecha:");
		lblFecha.setFont(new Font("Cambria", Font.PLAIN, 16));
		panelFecha.add(lblFecha);
		lblFecha.setHorizontalAlignment(SwingConstants.LEFT);
		
		Component horizontalStrut_1 = Box.createHorizontalStrut(20);
		panelFecha.add(horizontalStrut_1);
		
		spinner = new JSpinner();
		spinner.setFont(new Font("Cambria", Font.PLAIN, 16));
		spinner.setModel(new SpinnerDateModel(new Date(1357268400000L), new Date(-2208973392000L), null, Calendar.DAY_OF_YEAR));
		spinner.setPreferredSize(new Dimension(150, 35));
		spinner.setValue(new Date());
		panelFecha.add(spinner);

		
		JPanel panelPeso = new EPanel();
		panelPeso.setPreferredSize(new Dimension(250, 50));
		panelPeso.setMaximumSize(new Dimension(250, 50));
		panelNuevo.add(panelPeso);
		
		JLabel lblPeso = new JLabel("Peso:");
		lblPeso.setFont(new Font("Cambria", Font.PLAIN, 16));
		panelPeso.add(lblPeso);
		lblPeso.setHorizontalAlignment(SwingConstants.LEFT);
		
		Component horizontalStrut = Box.createHorizontalStrut(20);
		panelPeso.add(horizontalStrut);
		
		txPeso = new ETextField();
		panelPeso.add(txPeso);
		txPeso.setMaximumSize(new Dimension(150, 35));
		txPeso.addKeyListener(new MascaraTipoIntListener()	);
		
		JPanel panelAgregar = new EPanel();
		panelAgregar.setPreferredSize(new Dimension(250, 50));
		panelAgregar.setMaximumSize(new Dimension(250, 50));
		panelNuevo.add(panelAgregar);
		
		JButton btnAgregar = new EButton("AGREGAR");
		panelAgregar.add(btnAgregar);
		btnAgregar.addActionListener(new agregarAction());
		
		JPanel panel = new JPanel();
		panel.setOpaque(false);
		panel.setPreferredSize(new Dimension(250, 50));
		panel.setMinimumSize(new Dimension(250, 50));
		panel.setMaximumSize(new Dimension(250, 50));
		panelNuevo.add(panel);
		
		JButton btnSalir = new EButton("SALIR");
		panel.add(btnSalir);
		btnSalir.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				cerrarDialog();
			}
		});
		
		btnSalir.setMaximumSize(new Dimension(150, 35));
		
		Component verticalGlue = Box.createVerticalGlue();
		panelNuevo.add(verticalGlue);

	}


	
	private class listadoPesajeModel extends MyTableModel {

		private static final long serialVersionUID = 1L;
		
		public listadoPesajeModel(Vector<Pesaje> listaPesajes){
			super();
			
			String[] columnas={"PESO","FECHA DE PESAJE"};
			setColumnNames(columnas);
			Object[][] info= new Object[0][2];
			setColumnNames(columnas);

			if(listaPesajes.size()>0){
				info= new Object[listaPesajes.size()][2];
				for(int i=0;i<listaPesajes.size();i++){
					info[i][0]=listaPesajes.get(i).getValorPeso();
					info[i][1]=listaPesajes.get(i).getFechaPesaje();
				}
			}
			setInfo(info);
			boolean[] edits= {false,false};
			setEdits(edits);
			
			
			
		}
	
	}
	
	private class agregarAction extends AbstractAction{


		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent e) {
			int valor;
			Date fecha=(Date) spinner.getValue();
			
			if(!txPeso.getText().equals("")){
				
				 valor=Integer.parseInt(txPeso.getText());
				 try {
					 
					 gAnimal.registrarPesaje(valor, fecha);
					 Pesaje p=new entidades.Pesaje(gAnimal.getAnimalActual().getIdAnimal(), 0, valor, fecha);
					 pesos.add(p);
					 String pesajeTitulo=String.format("Peso Actual: %d",animal.getPesoActual());
					 scrollPane.setBorder(new TitledBorder(null, pesajeTitulo, TitledBorder.LEADING, TitledBorder.TOP, null, null));
					 table.setModel(new listadoPesajeModel(pesos));
					 gError.mostrarCartelAdvertencia("Se ha registrado Correctamente");
				} catch (Throwable e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
					gError.mostrarCartelError(e1.getMessage());
				}
			}
			else{
				gError.mostrarCartelError("Agregue un Peso");
			}
			
			
		}
		
	}
}

	